"""
[课程内容]: Python采集知乎专栏文档保存成pdf

[授课老师]: 青灯教育-自游

[环境使用]:
    Python 3.8
    Pycharm

[模块使用]:
    requests >>> pip install requests  数据请求
    parsel >>> pip install parsel  数据解析
    re >>> 内置模块 不需要安装 正则表达式
    pdfkit >>> pip install pdfkit

html_str ='''
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
{article}
</body>
</html>
'''
1. 采集文章内容, 保存成html文件
2. 把html文件, 转成pdf文件

采集数据:
    1. 发送请求
        找到相对应数据链接
    2. 获取数据
        获取响应数据
    3. 解析数据
        提取我们想要的内容
    4. 保存数据
        把解析出来数据进行保存


"""
# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入文件操作模块
import os.path
# 导入正则模块
import re
# 导入pdf模块
import pdfkit

html_str ='''
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
{article}
</body>
</html>
'''

link = 'https://www.zhihu.com/api/v4/columns/c_1421939237129838592/items?limit=10&offset=30'
headers = {
    # user-agent 用户代理 表示浏览器基本身份信息
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
json_data = requests.get(url=link, headers=headers).json()
for index in json_data['data']:
    # 确定请求链接
    url = f'https://zhuanlan.zhihu.com/p/{index["id"]}'
    # 伪装模拟
    headers = {
        # user-agent 用户代理 表示浏览器基本身份信息
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 获取数据
    # 解析数据 --> 把获取下来html字符串数据<response.text> 转成可解析对象
    selector = parsel.Selector(response.text)
    # 提取标题
    title = selector.css('.Post-Title::text').get()
    # 提取内容
    content = selector.css('.css-376mun .RichText').get()
    # 提取图片链接
    img_url_list = re.findall('<noscript><img src="(.*?)" data-caption=""', content)
    # 提取替换的内容
    img_list = re.findall('</noscript><img src="(.*?)" data-caption=""', content)
    for img_url, img in zip(img_url_list, img_list):
        content = content.replace(img, img_url)
    # 保存数据
    # 自动创建文件
    html_file = 'html\\'
    # 判断是否存在这个文件夹
    if not os.path.exists(html_file):
        # 自动创建
        os.mkdir(html_file)
    pdf_file = 'pdf\\'
    # 判断是否存在这个文件夹
    if not os.path.exists(pdf_file):
        # 自动创建
        os.mkdir(pdf_file)
    html_path = html_file + title + '.html'
    pdf_path = pdf_file + title + '.pdf'
    html = html_str.format(article=content)


    with open(html_path, mode='w', encoding='utf-8') as f:
        f.write(html)

    # 需要把html文件转成pdf
    config = pdfkit.configuration(wkhtmltopdf=r'D:\demo\wkhtmltopdf\bin\wkhtmltopdf.exe')
    pdfkit.from_file(html_path, pdf_path, configuration=config)

    print(title, '保存成功')
